/**
 * @author mmbro
 * @homepage https://gitee.com/mmbro/
 * @date 2021年05月17日23:33:36
 * @description 注释:玩家
 */
class Player{ // 定义一个Player类
    /**
     * @description 类名,序列化时记录类型
     * @type {string}
     */
    cn = 'Player';
    /**
     * @description 玩家id,随机17位数字
     * @type {number}
     */
    id = 0;
    /**
     * @description 玩家名字,需要唯一
     * @type {string}
     */
    name = 'GM';
    /**
     * @description 玩家密码,进行RSA加密
     * @type {string}
     */
    pass = '000';
    /**
     * @description 版本号,每次特定属性变更,版本号+1
     * @type {number}
     */
    version = 1;
    /**
     * @description 人物位置
     * @type {Position}
     */
    pos;
    /**
     * @description 上一次动作(用于校验人物动作合法性)
     * @type {Action}
     */
    lastAction;

    /**
     * @description 玩家构造方法
     * @param name
     * @param pass
     */
    constructor(name, pass) {
        AssertUtil.assertBlank(name, pass);
        this.name = name;
        this.pass = RsaUtil.rsaEncrypt(pass);
        this.id = RandomUtil.genId();
    }

    // =>类的所有方法都定义在类的prototype属性上。
    // =>在类的实例上调用方法，其实就是调用原型的方法。
    // =>类的内部所有方法都是不可枚举的
    toString() { // 定义toString方法
        return '(' + this.name + ',' + this.pass + ')';
    }
}